/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GestionEconomica;

import gestionJDBC.*;
import java.sql.*;
import javax.swing.*;

import java.util.ArrayList;
import gestionJugadores.*;

/**
 *Clase que implementa las distintas funciones que puede realizar el subsistema
 * Gestion Económica
 * @author Rodrigo Díaz Alfaraz
 * @version 1.0
 */
public class gestorEconomico  {
    
    private static gestorJDBC gestor = gestorJDBC.getInstance();
    
    
    /**
     * Genera un identificador nuevo unico para la tabla Pago de la BD
     * @author Rodrigo Díaz Alfaraz
     * @return INTEGER Id identificador nuevo
     * @version 1.0
     */
        public int generarIdePago(){
            int cant=0;
            gestor.Conectar();
            
            ResultSet rs2= gestor.Consultar("select count(*) as contador from Pago");

            try {
                rs2.next();
                
               cant =((Number) rs2.getObject("contador")).intValue();
                    
            } catch (SQLException e) {
                    JOptionPane.showMessageDialog(null, "Error al consultar numero de pagos registrados\n"+e.getMessage());

            }
            if(cant>0){
                ResultSet rs=gestor.Consultar("SELECT max(Pago.id_pago) AS  total FROM Pago");

                try {
                    rs.next();

                    cant=(Integer) rs.getObject("total");

                } catch (SQLException e) {
                        JOptionPane.showMessageDialog(null, "Error al consultar numero de pagos registrados\n"+e.getMessage());

                }	
            }

            gestor.Desconectar();
            return cant+1;
        }
        
        /**
         * Realiza la llamada a la funcion "introducir" de la clase pagoDB
         * @author Rodrigo Díaz Alfaraz
         * @param id_pago identificador del pago
         * @param cantidad cantidad del pago
         * @param fecha_pago fecha de realización del pago
         * @return  booleano del estado de la operacion true si sale bien false caso contrario
         * @version 1.0
         */
        public boolean introducirDatos(int id_pago, double cantidad, String fecha_pago){
            pagoDB s = new pagoDB();
           boolean confirmacion = s.introducir(id_pago,cantidad,fecha_pago);
           return confirmacion;

        }

        
        /**
         * Realiza la llamada a la funcion "introducir" de la clase colaboracionDB
         * @author Rodrigo Díaz Alfaraz
         * @param cantidad valor de la colaboración
         * @param fecha_colaboracion fecha de ingreso de la colaboración
         * @param nombre_colaboracion nombre del colaborador
         * @return  booleano del estado de la operacion true si sale bien false caso contrario
         * @version 1.0
         */
        public boolean introducirDatos( double cantidad, String fecha_colaboracion, String nombre_colaboracion){
            colaboracionDB s = new colaboracionDB();
            boolean confirmacion = s.introducir(cantidad,fecha_colaboracion,nombre_colaboracion);
            return confirmacion;

        }
        
        /**
         * Comprueba que los datos aportados sean válidos
         * @author Rodrigo Díaz Alfaraz
         * @param cantidad cantidad de la colaboracion
         * @param fecha_colaboracion fecha de la colaborarcion
         * @param nombre_colaboracion nombre del colaborador
         * @return  booleano del estado de la operacion true si sale bien false caso contrario
         * @version 1.0
         */
        public boolean comprobarDatosColaboracion(double cantidad, String fecha_colaboracion, String nombre_colaboracion){
            boolean exito=true;
            
            if((cantidad<0) || (fecha_colaboracion==null )|| (nombre_colaboracion==null )){
                 exito=false;
            }
            
            return exito;
        }
        /**
         * Comprueba que los datos aportados sean válidos
         * @author Rodrigo Díaz Alfaraz
         * @param cantidad valor del pago
         * @param fecha_pago fecha de ingreso del pago
         * @return  booleano del estado de la operacion true si sale bien false caso contrario
         * @version 1.0
         */
        public boolean comprobarDatosPago(double cantidad, String fecha_pago){
            boolean exito=true;
            
            if((cantidad<0) || (fecha_pago==null )){
                 exito=false;
            }
            
            return exito;
        }
        
        /**
         * Introduce en el sistema una nueva colaboración
         * @author Rodrigo Díaz Alfaraz
         * @param cantidad valor de la colaboración
         * @param fecha_colaboracion fecha de ingreso de esta   
         * @param nombre_colaboracion nombre del colaborador
         * @return  booleano del estado de la operacion true si sale bien false caso contrario
         * @version 1.0
         */
        public boolean introducirColaboracion(double cantidad, String fecha_colaboracion, String nombre_colaboracion){
             boolean exito;
             
             exito= comprobarDatosColaboracion(cantidad, fecha_colaboracion, nombre_colaboracion);
             if(exito==true){
                 exito=introducirDatos(cantidad, fecha_colaboracion, nombre_colaboracion);
             }
             
             return exito;
        }
        
        /**
         * Introduce un nuevo pago en el sistema
         * @author Rodrigo Díaz Alfaraz
         * @param idJugador identificador del jugador
         * @param cantidad valor del pago
         * @param fecha_pago fecha dle ingreso
         * @return  booleano del estado de la operacion true si sale bien false caso contrario
         * @version 1.0
         */
        public boolean introducirPago(int idJugador,double cantidad, String fecha_pago){
             boolean exito;
             GestorJugadores s= new GestorJugadores();
             
             exito= comprobarDatosPago(cantidad, fecha_pago);
             if(exito==true){
                 int id_pago = generarIdePago();
                 exito=introducirDatos(id_pago,cantidad, fecha_pago);
                 if(exito==true){
                    exito= s.asociarPago(idJugador,id_pago);
                 }
             }
             
             return exito;
        }
        
        /**
         * Obtiene todas las colaboraciones del sistema
         * @author Rodrigo Díaz Alfaraz
         * @return lista de todas las colaboraciones en el sistema
         * @version 1.0        
         */
        public ArrayList<colaboracion> MostrarColaboraciones(){
            colaboracionDB s = new colaboracionDB();
            ArrayList<colaboracion> p = s.getColaboraciones();
        return p;    
        }
        
        /**
         * Obtiene todos los pagos registrados en el sistema asociados a un jugador
         * @author Rodrigo Díaz Alfaraz
         * @param ide_jugador identificador del jugador
         * @return lista de pagos
         * @version 1.0        
         */
        public ArrayList<pago> ConsultarPago(int ide_jugador){
            pagoDB s = new pagoDB();
            GestorJugadores j= new GestorJugadores();
            ArrayList<pago> p =null;
                                  
           p = s.getPagos(ide_jugador);
        return p;    
        }
    
}
